from flask import Flask, render_template,request
import pandas as pd
import cufflinks as cf
import plotly as py
import plotly.graph_objs as go


app = Flask(__name__)
def read_data():
    return pd.read_csv("hurun_unicorn.tsv",
                       sep="\t",
                       engine="python",
                       encoding="utf8",
                       header=0,
                       )
df = read_data()
df.index.name = "序号"

#亚欧美处理
EU = ['瑞士', '英国', '德国', '瑞典','马耳他', '法国', '爱尔兰', '爱沙尼亚','西班牙', '卢森堡', '芬兰', ]
ASIA = ['中国', '新加坡', '印度尼西亚', '印度', '韩国','以色列','日本','菲律宾']
AME = [ '美国', '巴西','哥伦比亚', ]

欧洲 = df[df['国家'].isin(EU)]
欧洲.insert(欧洲.shape[1], '地区分布', "欧洲地区", allow_duplicates=False)
亚洲 = df[df['国家'].isin(ASIA)]
亚洲.insert(亚洲.shape[1], '地区分布', "亚洲地区", allow_duplicates=False)
美洲 = df[df['国家'].isin(AME)]
美洲.insert(美洲.shape[1], '地区分布', "美洲地区", allow_duplicates=False)
处理后数据 = pd.concat([欧洲, 亚洲, 美洲])

#大湾区处理
粤港澳大湾区 = ["广州","深圳","珠海","佛山","惠州","东莞","中山","江门","肇庆","香港","澳门"]
环杭州湾大湾区 = ["上海","杭州","宁波","嘉兴","绍兴","舟山"]
渤海大湾区 = ["北京","天津","大连","唐山","青岛","烟台","秦皇岛","威海"]

粤港澳 = df[df['城市'].isin(粤港澳大湾区)]
粤港澳.insert(粤港澳.shape[1], '湾区', "粤港澳大湾区", allow_duplicates=False)
环杭州 = df[df['城市'].isin(环杭州湾大湾区)]
环杭州.insert(环杭州.shape[1], '湾区', "环杭州湾大湾区", allow_duplicates=False)
渤海 = df[df['城市'].isin(渤海大湾区)]
渤海.insert(渤海.shape[1], '湾区', "渤海大湾区", allow_duplicates=False)
处理后数据_湾区 = pd.concat([粤港澳, 环杭州, 渤海])

#投资机构处理
right =  df['部分投资机构'].str.split('[,,、]', expand=True)
right = right.stack().reset_index(level=1, drop=True).rename('部分投资机构(拆)')
df.index.name="序号"
df_部分投资机构拆分 = pd.merge(df,right,on="序号")




# 展示欧亚美数据
@app.route('/entry')
def category() -> 'html':
    # 筛选数据目标（处理数据）
    df_all = 处理后数据.to_html()
    # 筛选目标
    category_list = ['欧洲地区','亚洲地区','美洲地区']
    res = category_list
    return render_template("results.html",
                           category_all_list=res,
                           the_res= df_all,
                           )


# 欧亚美数据筛选后的数据和图表
@app.route('/hurun',methods=['POST'])
def hurun_select() -> 'html':
    category_list = ['欧洲地区','亚洲地区','美洲地区']
    res = category_list
    choose = request.form["category_all_list"]
    print(choose) # 检查用户输入
    if choose in category_list:
        place_choose=处理后数据[处理后数据['地区分布'].isin([choose])]
        地区行业数据 = place_choose[['国家','城市', '企业名称', '估值（亿人民币）', '成立年份', '行业', '掌门人/创始人','地区分布']] \
            .groupby(['国家','城市', '行业','成立年份','掌门人/创始人']) \
            .agg({'估值（亿人民币）': 'sum', '企业名称': 'count'}) \
            .sort_values(['企业名称'], ascending=False) \
            .rename(columns={"企业名称": "企业数量"}) \
            .reset_index()
    print(地区行业数据.head(5)) # 在后台检查描述性统计
    # 交互式可视化画图
    fig = 地区行业数据.iplot(kind="bar", x="行业", y="估值（亿人民币）", asFigure=True)
    py.offline.plot(fig,  filename="example.html",auto_open=False)
    with open("example.html", encoding="utf8", mode="r") as f:
        plot_all = "".join(f.readlines())
    data_str = 地区行业数据.to_html()


    return render_template('results.html',
                            the_plot_all = plot_all,
                            the_res = data_str,
                            category_all_list=res,
                           )


# 中国城市
@app.route('/Chinese_cities')
# 视图函数
def get_Chinese_cities():
    中国 = df[df['国家'].isin(['中国'])]
    城市情况 = 中国[['城市', '企业名称', '估值（亿人民币）', '成立年份', '行业','掌门人/创始人','部分投资机构']].groupby(['城市', '行业', '成立年份','掌门人/创始人','部分投资机构']).agg(
        {'估值（亿人民币）': 'sum', '企业名称': 'count'}).sort_values(['估值（亿人民币）', '企业名称'], ascending=False).rename(
        columns={"企业名称": "企业数量"}).reset_index()
    fig = 城市情况.iplot(kind="bar", x="城市", y="估值（亿人民币）", asFigure=True)
    py.offline.plot(fig, filename="example.html", auto_open=False)
    with open("example.html", encoding="utf8", mode="r") as f:
        plot_all = "".join(f.readlines())
        data_str = 城市情况.to_html()
        return render_template('Chinese_cities.html',   # 要改html
                       the_plot_all_C=plot_all,
                       the_res_C=data_str,
                       )



# 大湾区数据展示
@app.route('/entry_bay')
def category_bay() -> 'html':
    # 筛选数据目标（处理数据）
    df_all = 处理后数据_湾区.to_html()
    # 筛选目标
    category_list = ["粤港澳大湾区", "环杭州湾大湾区", "渤海大湾区"]
    res = category_list
    return render_template("entry_bay.html",
                           category_all_list_bay=res,
                           the_res_bay= df_all,
                           )

# 对中国三大经济湾区的估值情况
@app.route('/bay_area',methods=['POST'])
def bay_area_select() -> 'html':
    category_list = ["粤港澳大湾区", "环杭州湾大湾区", "渤海大湾区"]
    res = category_list
    choose = request.form["category_all_list_bay"]
    print(choose) # 检查用户输入
    if choose in category_list:
        place_choose=处理后数据_湾区[处理后数据_湾区['湾区'].isin([choose])]
        地区行业数据_湾区 = place_choose[['国家','城市', '企业名称', '估值（亿人民币）', '成立年份', '行业', '掌门人/创始人','湾区']] \
            .groupby(['国家','城市', '行业','成立年份','掌门人/创始人']) \
            .agg({'估值（亿人民币）': 'sum', '企业名称': 'count'}) \
            .sort_values(['企业名称'], ascending=False) \
            .rename(columns={"企业名称": "企业数量"}) \
            .reset_index()
    print(地区行业数据_湾区.head(5)) # 在后台检查描述性统计
    # 交互式可视化画图
    fig = 地区行业数据_湾区.iplot(kind="bar", x="行业", y="估值（亿人民币）", asFigure=True)
    py.offline.plot(fig,  filename="example.html",auto_open=False)
    with open("example.html", encoding="utf8", mode="r") as f:
        plot_all = "".join(f.readlines())
    data_str = 地区行业数据_湾区.to_html()


    return render_template('entry_bay.html',
                            the_plot_all_bay = plot_all,
                            the_res_bay = data_str,
                            category_all_list_bay=res,
                           )

# 头部投资机构
@app.route('/invest')
def invest():
    头部投资公司 = df_部分投资机构拆分[['企业名称','部分投资机构(拆)','估值（亿人民币）']]\
                .groupby(['部分投资机构(拆)'])\
                .agg({'企业名称':'count','估值（亿人民币）':'sum'})\
                .sort_values('估值（亿人民币）',ascending=False)\
                .rename(columns={"企业名称": "投资企业数量"})
    print(头部投资公司)
    fig = 头部投资公司.reset_index().iplot(kind="bar", x="部分投资机构(拆)", y="估值（亿人民币）", asFigure=True)
    py.offline.plot(fig, filename="example.html", auto_open=False)
    with open("example.html", encoding="utf8", mode="r") as f:
        plot_all = "".join(f.readlines())
        data_str = 头部投资公司.head(10).to_html()
        return render_template('invest.html',   # 要改html
                       the_plot_invest=plot_all,
                       the_res_invest=data_str,
                       )



if __name__ == '__main__':
    app.run(
        debug=True
    )

